#ifndef QGEOTILEDMAPPINGMANAGERENGINEQGC_H
#define QGEOTILEDMAPPINGMANAGERENGINEQGC_H

#include <QtLocation/QGeoServiceProvider>
#include <QtLocation/private/qgeotiledmap_p.h>
#include <QtLocation/private/qgeotiledmappingmanagerengine_p.h>

/**
 * @brief QGC瓦片地图实现类
 * 
 * 继承自QGeoTiledMap，用于实现QGC的瓦片地图显示功能
 * 
 * QGeoTiledMap类的作用：
 * 1. 瓦片地图显示 - 专门用于处理基于瓦片的地图显示
 * 2. 地图渲染管理 - 管理地图瓦片的渲染和显示，处理不同缩放级别下的瓦片加载
 * 3. 瓦片管理 - 管理地图瓦片的缓存和加载，协调与地图引擎的交互
 * 4. 地图交互 - 处理用户与地图的交互，如拖拽、缩放等操作
 */
class QGeoTiledMapQGC : public QGeoTiledMap
{
    Q_OBJECT
public:
    /**
     * @brief 构造函数
     * @param engine 地图引擎指针
     * @param parent 父对象指针
     */
    QGeoTiledMapQGC(QGeoTiledMappingManagerEngine *engine, QObject *parent = 0);
};

class QGeoTileFetcherQGC;

/**
 * @brief QGC瓦片地图管理引擎类
 * 
 * 继承自QGeoTiledMappingManagerEngine，用于管理QGC的瓦片地图相关功能，
 * 包括地图类型支持、缓存设置、瓦片获取等核心功能。
 * 
 * 主要职责：
 * 1. 地图引擎管理 - 初始化地图引擎，设置地图基本参数如缩放级别、瓦片大小等
 * 2. 地图类型支持 - 动态支持多种地图类型（如Bing、Google、Mapbox等）
 * 3. 相机能力设置 - 设置地图的相机功能，包括最小/最大缩放级别、是否支持方位角等
 * 4. 缓存管理 - 管理地图瓦片的缓存机制，包括磁盘缓存和内存缓存
 * 5. 瓦片获取器管理 - 创建并管理QGeoTileFetcherQGC实例，用于获取地图瓦片
 * 6. 地图实例创建 - 通过createMap方法创建QGeoTiledMapQGC实例用于实际的地图显示
 */
class QGeoTiledMappingManagerEngineQGC : public QGeoTiledMappingManagerEngine
{
    Q_OBJECT
public:
    /**
     * @brief 构造函数
     * @param parameters 初始化参数
     * @param error 错误代码指针
     * @param errorString 错误信息字符串指针
     */
    QGeoTiledMappingManagerEngineQGC(const QVariantMap &parameters, QGeoServiceProvider::Error *error, QString *errorString);
    
    /**
     * @brief 析构函数
     */
    ~QGeoTiledMappingManagerEngineQGC();
    
    /**
     * @brief 创建地图实例
     * @return 地图实例指针
     */
    QGeoMap *createMap();

private:
    /**
     * @brief 设置地图缓存
     * @param parameters 初始化参数
     */
    void _setCache(const QVariantMap &parameters);
};

#endif // QGEOTILEDMAPPINGMANAGERENGINEQGC_H